package chm;

import java.util.concurrent.ConcurrentHashMap;

/**
 * 学习 ConcurentHashMap
 * 
 * @author insight
 * @since 2021/9/24
 */
public class CHMTest {
    public static void main(String[] args) {
        // 初始化
        // 并发等级 1.8之前对应 segment 数组的大小 现在作为容量参考标准
        // 引入 sizeCtl
        // -1 说明正在初始化
        // -N 说明有N-1个线程正在进行扩容
        // 表示 table 初始化大小 如果 table 没有初始化
        // 表示 table 容量 如果 table　已经初始化
        ConcurrentHashMap<Integer, Integer> mp =
                new ConcurrentHashMap<>(8, 0.75f, 2);
        // put 第一次put会初始化数组
        // 如果要插入的位置为空 尝试cas
        // 判断是否需要resize
        // 加锁写入数据
        // 判断是否需要转化成树
        mp.put(1, 1);
        // 计算 hash 查找
        // 如果小于0 说明扩容或者是红黑树 find
        // 否则遍历链表查找
        mp.get(2);
    }
}